package com.lx.idea.report.model;

import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.XmlUtil;
import lombok.Data;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

/**
 * @Author ybb
 * @Description (ROOT节点)解析异常信息实时上报
 * @Date 2021/9/13 19:28
 */
@Data
public class RootRealTimeInfo {
    /*
     上报状态类型
     异常、恢复[枚举值: 1:异常，2:恢复]
     */
    private String repStatusType;
    /*
    上报事件编号
    机构自定义，需保证编号唯一性，可以通过时间戳等方式计算[时间戳(到秒) + 5位随机值]
    */
    private String repEventNo;
    /*
    对应异常事件编号
    当类型为恢复正常时需填写
    */
    private String excEventNo;
    /*
    发生时间
    状态改变的时间，精确到秒[格式: yyy-MM-dd HH:mm:ss]
    */
    private String occurTime;
    /*
    异常原因
    如果系统日志能获取到则上传，否则不上传[日志文件内关键字]
    */
    private String excCause;
    /*
    异常类型
    [枚举值: 1网络故障、2系统异常、3安全攻击、4其他]
    */
    private String excType;


    public Document createRoot(){
        Document document = XmlUtil.createXml();
        Element root = document.createElement("rrti:rootReaTimInfo");
        root.setAttribute("xmlns:rrti", "urn:ietf:params:xml:ns:rootreatiminfo-1.0");
        root.setAttribute("xmlns:rsrti", "urn:ietf:params:xml:ns:regsrvreatiminfo-1.0");
        root.setAttribute("xmlns:rmci", "urn:ietf:params:xml:ns:rootservcominfo-1.0");
        root.setAttribute("xmlns:bt", "urn:ietf:params:xml:ns:basetype-1.0");

        Element regManComInfo = document.createElement("rrti:rootComInfo");

        Element regServerType = document.createElement("rmci:regServerType");
        Element servName = document.createElement("bt:servName");
        Element gnrlId = document.createElement("bt:gnrlId");
        servName.setTextContent("信通院");
        gnrlId.setTextContent("2631614400000001");
        regServerType.appendChild(servName);
        regServerType.appendChild(gnrlId);

        Element idType = document.createElement("rmci:idType");
        Element dataCrtTime = document.createElement("rmci:dataCrtTime");
        Element operType = document.createElement("rmci:operType");
        Element transId = document.createElement("rmci:transId");

        regManComInfo.appendChild(regServerType);
        regManComInfo.appendChild(idType);
        regManComInfo.appendChild(dataCrtTime);
        regManComInfo.appendChild(operType);
        regManComInfo.appendChild(transId);

        return null;
    }

    public String fileName(){
        int i = RandomUtil.getRandom().nextInt(10000,99999);
       return  "ROOT-"+"审批通过的当前系统毫秒级拼接5位随机字符串-"+"RRMD02-"+
                new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+i+".xml";
    }

    public static void main(String[] args) throws Exception {
        RootRealTimeInfo r = new RootRealTimeInfo();
        Class c = r.getClass();
        Field[] fields = c.getDeclaredFields();
        Arrays.asList(fields).forEach( field -> {
            try {
                System.out.println(field.getName()+"\t"+ field.get(r));
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        });

    }

}
